TOP

SQL GROUP BY

SQL GROUP BY Opis

Instrukcja GROUP BY grupuje wiersze o tych samych wartościach w wiersze podsumowujące, np. „znajdź liczbę klientów w każdym kraju”.

Instrukcja GROUP BY jest często używana z funkcjami agregującymi (COUNT(), MAX(), MIN(), SUM(), AVG()) w celu grupowania zestawu wyników według jednej lub większej liczby kolumn.


GROUP BY Składnia

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s)

Baza demonstracyjna

Poniżej znajduje się przykład z tabeli „Customers” („Klienci”) bazy danych „Northwind”:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.5021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.5023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

SQL GROUP BY Przykłady

Poniższa instrukcja SQL podaje liczbę klientów w każdym kraju:

Run SQLSELECT COUNT(CustomerID), Country 
FROM Customers 
GROUP BY Country

Poniższa instrukcja SQL zawiera listę klientów w każdym kraju, posortowaną od najwyższej do najniższej:

Run SQLSELECT COUNT(CustomerID), Country 
FROM Customers 
GROUP BY Country 
ORDER BY COUNT(CustomerID) DESC

Baza demonstracyjna

Poniżej znajduje się przykład z tabeli „Orders” („Zamówienia”) bazy danych „Northwind”:

ProductIDOrderIDCustomerIDEmployeeIDOrderDateShipperID
1102489051996-07-043
2102498161996-07-051
3102503441996-07-082
4102518431996-07-081
5102527641996-07-092

Oraz przykład z tabeli „Shippers” („Nadawcy”):

ShipperIDShipperNamePhone
1Speedy Express(503) 555-9831
2United Package(503) 555-3199
3Federal Shipping(503) 555-9931

GROUP BY razem z JOIN Przykład

Poniższa instrukcja SQL wyświetla liczbę zamówień wysłanych przez każdego nadawcę:

Run SQLSELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders 
FROM Orders 
LEFT JOIN Shippers 
ON Orders.ShipperID = Shippers.ShipperID 
GROUP BY ShipperName